Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


sbapp/mapview/source.py 28f930905eee67c8d0b8a24d08a5937f41cea0ae (28f93090) Text, 5.09 KB

T8b949e# coding=utf-8

Te6edf3__all__ Tff7b72= Tb4b4b4[Ta5d6ff"Ta5d6ffMapSourceTa5d6ff"Tb4b4b4]

Tff7b72import T7ee787hashlib
Tff7b72from T7ee787math Tff7b72import Te6edf3atanTb4b4b4, Te6edf3ceilTb4b4b4, Te6edf3cosTb4b4b4, Te6edf3expTb4b4b4, Te6edf3logTb4b4b4, Te6edf3piTb4b4b4, Te6edf3tan

Tff7b72from T7ee787kivyT7ee787.T7ee787metrics Tff7b72import Te6edf3dp

Tff7b72from T7ee787mapviewT7ee787.T7ee787constants Tff7b72import Tb4b4b4(
Te6edf3CACHE_DIRTb4b4b4,
Te6edf3MAX_LATITUDETb4b4b4,
Te6edf3MAX_LONGITUDETb4b4b4,
Te6edf3MIN_LATITUDETb4b4b4,
Te6edf3MIN_LONGITUDETb4b4b4,
Tb4b4b4)
Tff7b72from T7ee787mapviewT7ee787.T7ee787downloader Tff7b72import Te6edf3Downloader
Tff7b72from T7ee787mapviewT7ee787.T7ee787utils Tff7b72import Te6edf3clamp


Tff7b72class T56d364MapSourceTb4b4b4:
T8b949e"""Base class for implementing a map source / provider
"""

Te6edf3attribution_osm Tff7b72= Ta5d6ff'Ta5d6ffMaps & Data © [i][ref=http://www.osm.org/copyright]OpenStreetMap contributors[/ref][/i]Ta5d6ff'
Te6edf3attribution_ve Tff7b72= Ta5d6ff'Ta5d6ffMaps © [i][ref=http://www.virtualearth.net]VirtualEarth[/ref][/i]Ta5d6ff'

T8b949e# list of available providers
T8b949e# cache_key: (is_overlay, minzoom, maxzoom, url, attribution)
Te6edf3providers Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffosmTa5d6ff"Tb4b4b4: Tb4b4b4(
T79c0ff0Tb4b4b4,
T79c0ff0Tb4b4b4,
T79c0ff19Tb4b4b4,
Ta5d6ff"Ta5d6ffhttp://Tffd700{s}Ta5d6ff.tile.openstreetmap.org/Tffd700{z}Ta5d6ff/Tffd700{x}Ta5d6ff/Tffd700{y}Ta5d6ff.pngTa5d6ff"Tb4b4b4,
Te6edf3attribution_osmTb4b4b4,
Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffveTa5d6ff"Tb4b4b4: Tb4b4b4(
T79c0ff0Tb4b4b4,
T79c0ff0Tb4b4b4,
T79c0ff19Tb4b4b4,
Ta5d6ff"Ta5d6ffhttp://ecn.t3.tiles.virtualearth.net/tiles/aTffd700{q}Ta5d6ff.jpeg?g=1Ta5d6ff"Tb4b4b4,
Te6edf3attribution_veTb4b4b4,
Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffosm-hotTa5d6ff"Tb4b4b4: Tb4b4b4(
T79c0ff0Tb4b4b4,
T79c0ff0Tb4b4b4,
T79c0ff19Tb4b4b4,
Ta5d6ff"Ta5d6ffhttp://Tffd700{s}Ta5d6ff.tile.openstreetmap.fr/hot/Tffd700{z}Ta5d6ff/Tffd700{x}Ta5d6ff/Tffd700{y}Ta5d6ff.pngTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff"Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4}

Tff7b72def Tff7b72__init__Tb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3urlTff7b72=Ta5d6ff"Ta5d6ffhttp://Tffd700{s}Ta5d6ff.tile.openstreetmap.org/Tffd700{z}Ta5d6ff/Tffd700{x}Ta5d6ff/Tffd700{y}Ta5d6ff.pngTa5d6ff"Tb4b4b4,
Te6edf3cache_keyTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3min_zoomTff7b72=T79c0ff0Tb4b4b4,
Te6edf3max_zoomTff7b72=T79c0ff19Tb4b4b4,
Te6edf3tile_sizeTff7b72=T79c0ff256Tb4b4b4,
Te6edf3image_extTff7b72=Ta5d6ff"Ta5d6ffpngTa5d6ff"Tb4b4b4,
Te6edf3attributionTff7b72=Ta5d6ff"Ta5d6ff© OpenStreetMap contributorsTa5d6ff"Tb4b4b4,
Te6edf3subdomainsTff7b72=Ta5d6ff"Ta5d6ffabcTa5d6ff"Tb4b4b4,
Te6edf3quad_key Tff7b72= Tff7b72FalseTb4b4b4,
Tff7b72*Tff7b72*Te6edf3kwargs
Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3cache_key Tff7b72is Tff7b72NoneTb4b4b4:
T8b949e# possible cache hit, but very unlikely
Te6edf3cache_key Tff7b72= Te6edf3hashlibTff7b72.Td2a8ffsha224Tb4b4b4(Te6edf3urlTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf8Ta5d6ff"Tb4b4b4)Tb4b4b4)Tff7b72.Td2a8ffhexdigestTb4b4b4(Tb4b4b4)Tb4b4b4[Tb4b4b4:T79c0ff10Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffurl Tff7b72= Te6edf3url
Tff7b72selfTff7b72.Td2a8ffcache_key Tff7b72= Te6edf3cache_key
Tff7b72selfTff7b72.Td2a8ffmin_zoom Tff7b72= Te6edf3min_zoom
Tff7b72selfTff7b72.Td2a8ffmax_zoom Tff7b72= Te6edf3max_zoom
Tff7b72selfTff7b72.Td2a8fftile_size Tff7b72= Te6edf3tile_size
Tff7b72selfTff7b72.Td2a8ffimage_ext Tff7b72= Te6edf3image_ext
Tff7b72selfTff7b72.Td2a8ffattribution Tff7b72= Te6edf3attribution
Tff7b72selfTff7b72.Td2a8ffsubdomains Tff7b72= Te6edf3subdomains
Tff7b72selfTff7b72.Td2a8ffquad_key Tff7b72= Te6edf3quad_key
Tff7b72selfTff7b72.Td2a8ffcache_fmt Tff7b72= Ta5d6ff"Tffd700{cache_key}Ta5d6ff_Tffd700{zoom}Ta5d6ff_Tffd700{tile_x}Ta5d6ff_Tffd700{tile_y}Ta5d6ff.Tffd700{image_ext}Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffdp_tile_size Tff7b72= Tffa657minTb4b4b4(Te6edf3dpTb4b4b4(Tff7b72selfTff7b72.Td2a8fftile_sizeTb4b4b4)Tb4b4b4, Tff7b72selfTff7b72.Td2a8fftile_size Tff7b72* T79c0ff2Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdefault_lat Tff7b72= Tff7b72selfTff7b72.Td2a8ffdefault_lon Tff7b72= Tff7b72selfTff7b72.Td2a8ffdefault_zoom Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffbounds Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffcache_dir Tff7b72= Te6edf3kwargsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff'Ta5d6ffcache_dirTa5d6ff'Tb4b4b4, Te6edf3CACHE_DIRTb4b4b4)

Tf0883e@staticmethod
Tff7b72def Td2a8fffrom_providerTb4b4b4(Te6edf3keyTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Te6edf3quad_key Tff7b72= Te6edf3kwargsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff'Ta5d6ffquad_keyTa5d6ff'Tb4b4b4, Tff7b72FalseTb4b4b4)
Te6edf3provider Tff7b72= Te6edf3MapSourceTff7b72.Td2a8ffprovidersTb4b4b4[Te6edf3keyTb4b4b4]
Te6edf3cache_dir Tff7b72= Te6edf3kwargsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff'Ta5d6ffcache_dirTa5d6ff'Tb4b4b4, Te6edf3CACHE_DIRTb4b4b4)
Te6edf3options Tff7b72= Tb4b4b4{Tb4b4b4}
Te6edf3is_overlayTb4b4b4, Te6edf3min_zoomTb4b4b4, Te6edf3max_zoomTb4b4b4, Te6edf3urlTb4b4b4, Te6edf3attribution Tff7b72= Te6edf3providerTb4b4b4[Tb4b4b4:T79c0ff5Tb4b4b4]
Tff7b72if Tffa657lenTb4b4b4(Te6edf3providerTb4b4b4) Tff7b72> T79c0ff5Tb4b4b4:
Te6edf3options Tff7b72= Te6edf3providerTb4b4b4[T79c0ff5Tb4b4b4]
Tff7b72return Te6edf3MapSourceTb4b4b4(
Te6edf3cache_keyTff7b72=Te6edf3keyTb4b4b4,
Te6edf3min_zoomTff7b72=Te6edf3min_zoomTb4b4b4,
Te6edf3max_zoomTff7b72=Te6edf3max_zoomTb4b4b4,
Te6edf3urlTff7b72=Te6edf3urlTb4b4b4,
Te6edf3cache_dirTff7b72=Te6edf3cache_dirTb4b4b4,
Te6edf3attributionTff7b72=Te6edf3attributionTb4b4b4,
Te6edf3quad_keyTff7b72=Te6edf3quad_keyTb4b4b4,
Tff7b72*Tff7b72*Te6edf3options
Tb4b4b4)

Tff7b72def Td2a8ffget_xTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3zoomTb4b4b4, Te6edf3lonTb4b4b4)Tb4b4b4:
T8b949e"""Get the x position on the map using this map source's projection
(0, 0) is located at the top left.
"""
Te6edf3lon Tff7b72= Te6edf3clampTb4b4b4(Te6edf3lonTb4b4b4, Te6edf3MIN_LONGITUDETb4b4b4, Te6edf3MAX_LONGITUDETb4b4b4)
Tff7b72return Tb4b4b4(Tb4b4b4(Te6edf3lon Tff7b72+ T79c0ff180.0Tb4b4b4) Tff7b72/ T79c0ff360.0 Tff7b72* Tffa657powTb4b4b4(T79c0ff2.0Tb4b4b4, Te6edf3zoomTb4b4b4)Tb4b4b4) Tff7b72* Tff7b72selfTff7b72.Td2a8ffdp_tile_size

Tff7b72def Td2a8ffget_yTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3zoomTb4b4b4, Te6edf3latTb4b4b4)Tb4b4b4:
T8b949e"""Get the y position on the map using this map source's projection
(0, 0) is located at the top left.
"""
Te6edf3lat Tff7b72= Te6edf3clampTb4b4b4(Tff7b72-Te6edf3latTb4b4b4, Te6edf3MIN_LATITUDETb4b4b4, Te6edf3MAX_LATITUDETb4b4b4)
Te6edf3lat Tff7b72= Te6edf3lat Tff7b72* Te6edf3pi Tff7b72/ T79c0ff180.0
Tff7b72return Tb4b4b4(
Tb4b4b4(T79c0ff1.0 Tff7b72- Te6edf3logTb4b4b4(Te6edf3tanTb4b4b4(Te6edf3latTb4b4b4) Tff7b72+ T79c0ff1.0 Tff7b72/ Te6edf3cosTb4b4b4(Te6edf3latTb4b4b4)Tb4b4b4) Tff7b72/ Te6edf3piTb4b4b4) Tff7b72/ T79c0ff2.0 Tff7b72* Tffa657powTb4b4b4(T79c0ff2.0Tb4b4b4, Te6edf3zoomTb4b4b4)
Tb4b4b4) Tff7b72* Tff7b72selfTff7b72.Td2a8ffdp_tile_size

Tff7b72def Td2a8ffget_lonTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3zoomTb4b4b4, Te6edf3xTb4b4b4)Tb4b4b4:
T8b949e"""Get the longitude to the x position in the map source's projection
"""
Te6edf3dx Tff7b72= Te6edf3x Tff7b72/ Tffa657floatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdp_tile_sizeTb4b4b4)
Te6edf3lon Tff7b72= Te6edf3dx Tff7b72/ Tffa657powTb4b4b4(T79c0ff2.0Tb4b4b4, Te6edf3zoomTb4b4b4) Tff7b72* T79c0ff360.0 Tff7b72- T79c0ff180.0
Tff7b72return Te6edf3clampTb4b4b4(Te6edf3lonTb4b4b4, Te6edf3MIN_LONGITUDETb4b4b4, Te6edf3MAX_LONGITUDETb4b4b4)

Tff7b72def Td2a8ffget_latTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3zoomTb4b4b4, Te6edf3yTb4b4b4)Tb4b4b4:
T8b949e"""Get the latitude to the y position in the map source's projection
"""
Te6edf3dy Tff7b72= Te6edf3y Tff7b72/ Tffa657floatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdp_tile_sizeTb4b4b4)
Te6edf3n Tff7b72= Te6edf3pi Tff7b72- T79c0ff2 Tff7b72* Te6edf3pi Tff7b72* Te6edf3dy Tff7b72/ Tffa657powTb4b4b4(T79c0ff2.0Tb4b4b4, Te6edf3zoomTb4b4b4)
Te6edf3lat Tff7b72= Tff7b72-T79c0ff180.0 Tff7b72/ Te6edf3pi Tff7b72* Te6edf3atanTb4b4b4(T79c0ff0.5 Tff7b72* Tb4b4b4(Te6edf3expTb4b4b4(Te6edf3nTb4b4b4) Tff7b72- Te6edf3expTb4b4b4(Tff7b72-Te6edf3nTb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72return Te6edf3clampTb4b4b4(Te6edf3latTb4b4b4, Te6edf3MIN_LATITUDETb4b4b4, Te6edf3MAX_LATITUDETb4b4b4)

Tff7b72def Td2a8ffget_row_countTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3zoomTb4b4b4)Tb4b4b4:
T8b949e"""Get the number of tiles in a row at this zoom level
"""
Tff7b72if Te6edf3zoom Tff7b72== T79c0ff0Tb4b4b4:
Tff7b72return T79c0ff1
Tff7b72return T79c0ff2 Tff7b72<< Tb4b4b4(Te6edf3zoom Tff7b72- T79c0ff1Tb4b4b4)

Tff7b72def Td2a8ffget_col_countTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3zoomTb4b4b4)Tb4b4b4:
T8b949e"""Get the number of tiles in a col at this zoom level
"""
Tff7b72if Te6edf3zoom Tff7b72== T79c0ff0Tb4b4b4:
Tff7b72return T79c0ff1
Tff7b72return T79c0ff2 Tff7b72<< Tb4b4b4(Te6edf3zoom Tff7b72- T79c0ff1Tb4b4b4)

Tff7b72def Td2a8ffget_min_zoomTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Return the minimum zoom of this source
"""
Tff7b72return Tff7b72selfTff7b72.Td2a8ffmin_zoom

Tff7b72def Td2a8ffget_max_zoomTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Return the maximum zoom of this source
"""
Tff7b72return Tff7b72selfTff7b72.Td2a8ffmax_zoom

Tff7b72def Td2a8fffill_tileTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3tileTb4b4b4)Tb4b4b4:
T8b949e"""Add this tile to load within the downloader
"""
Tff7b72if Te6edf3tileTff7b72.Td2a8ffstate Tff7b72== Ta5d6ff"Ta5d6ffdoneTa5d6ff"Tb4b4b4:
Tff7b72return
Te6edf3DownloaderTff7b72.Td2a8ffinstanceTb4b4b4(Te6edf3cache_dirTff7b72=Tff7b72selfTff7b72.Td2a8ffcache_dirTb4b4b4)Tff7b72.Td2a8ffdownload_tileTb4b4b4(Te6edf3tileTb4b4b4)


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────